本篇在舉例說明並且練習分析平行計算的方法與設計
The n-Body Problem:
簡單來說,就是模擬很多粒子之間的交互作用,粒子跟粒子之間會有引力作用,
要隨時求出每個粒子的位置與速度向量,還有其他粒子的資訊,才能算出其他粒子對於該粒子的引力影響
假設現在有三個質點
每個質點有他的data量 (坐標 有兩個64bit的浮點數)
有一個向量 (坐標 有兩個64bit的浮點數)
所以n個質點就有 4n個 浮點數
經過時間 data T 後直點來到新的位置,
然後要加上其他直點給予的引力影響
最後算出新的位置
但是除了位置的改變之外
其實速度也會變
所以這種運算要把它平行化
Partitioning
首先將問題分割 Assume one task per particle 假設一個任務針對一顆粒子!
Task
– particle’s position
– velocity vector
這個Task 寫出我們需要求出粒子的位置以及他目前的速度向量
Iteration
– Get positions of all other particles
– Compute new position, velocity
這裡是指說,要必須不斷地求出其他粒子的位置坐標,這樣才能算出下一秒鐘其他粒子對於自己那顆粒子的引力影響
並且不對地更新位置坐標資訊與速度向量的資訊!
Gather
每一個個體都需要拿到其他人手上的東西
這個動作叫做 gather
就是把其他 process 手上算好的資料拿過來
當然自己算得部分也要給出去
All-gether
自己要拿其他人算的結果
而自己算的結果也要全部給出去一遍
這種叫做 all gather
( to be continued ...)